package cn.bopomo.dealer.base.util;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.*;

public class SafeImage extends HttpServlet
{

    private static final String CONTENT_TYPE = "image/jpeg";
    private static final String CHARARRAY[] = {
        "2", "3", "4", "5", "6", "7", "8", "9", 
        "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", 
        "k", "m", "n", "p", "q", "r", "s", "t", 
        "u", "v", "w", "x", "y", "z"
    };

    public SafeImage()
    {
    }

    public void init()
        throws ServletException
    {
        super.init();
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {
    	try{
	        response.setContentType("image/jpeg");
	        response.setHeader("Pragma", "No-cache");
	        response.setHeader("Cache-Control", "no-cache");
	        response.setDateHeader("Expires", 0L);
	        	       
	        int width = 60;
	        int height = 20;
	        BufferedImage image = new BufferedImage(width, height, 1);
	        Graphics g = image.getGraphics();
	        Random random = new Random();
	        g.setColor(getRandColor(200, 250));
	        g.fillRect(0, 0, width, height);
	        g.setFont(new Font("Arial", 0, 19));
	        g.setColor(getRandColor(160, 200));
	        for(int i = 0; i < 155; i++)
	        {
	            int x = random.nextInt(width + 100);
	            int y = random.nextInt(height + 100);
	            int xl = random.nextInt(10);
	            int yl = random.nextInt(12);
	            g.drawOval(x, y, x + xl, y + yl);
	        }
	
	        String sRand = "";
	        for(int i = 0; i < 4; i++)
	        {
	            String rand = getRandChar(random.nextInt(CHARARRAY.length));
	            sRand = sRand + rand;
	            g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
	            g.drawString(rand, 13 * i + 6, 16);
	        }
	        
	        
	        /*ServletContext ctx = request.getSession().getServletContext();
	    	String domain = ctx.getInitParameter("cookieDomain");
	    	CookieUtil.addEncryptCookie(response,"/","checkCode",sRand,domain,-1);*/
	    	
	    	request.getSession().setAttribute("checkCode", sRand);
	    	
	        g.dispose();
	        javax.servlet.ServletOutputStream imageOut = response.getOutputStream();
	        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(imageOut);
	        encoder.encode(image);
    	}catch(Exception e){
    		throw new ServletException(e.getMessage());
    	}
    }

    public void destroy()
    {
    }

    private Color getRandColor(int fc, int bc)
    {
        Random random = new Random();
        if(fc > 255)
            fc = 255;
        if(bc > 255)
            bc = 255;
        int r = fc + random.nextInt(bc - fc);
        int g = fc + random.nextInt(bc - fc);
        int b = fc + random.nextInt(bc - fc);
        return new Color(r, g, b);
    }

    private String getRandChar(int randNumber)
    {
        return CHARARRAY[randNumber];
    }

}
